package com.platform.modules.mall.activity.restrict;

import com.alibaba.fastjson.JSONObject;
import com.platform.modules.mall.activity.entity.bo.ActivityGoshoppingBo;
import com.platform.modules.mall.entity.MallActivityEntity;
import com.platform.modules.mall.entity.MallGoodsToActivityEntity;

import java.util.List;


/**
 * 活动限制规则的实现接口
 *      如果需要添加新的限制规则：
 *           需要实现RestrictInterface接口，或者继承RestrictAbstract抽象类
 *
 * 实现一：WhitelistPhoneVerify是关于白名单手机号码的实现，根据手机号码和白名单类型，找到白名单信息，验证领取次数
 *          WhitelistLevelVerify继承了WhitelistPhoneVerify，是在白名单手机号码限制的基础上，增加了关于等级的限制
 *          WhitelistNumberVerify继承了WhitelistPhoneVerify，没有做先的限制，单纯限制次数
 *       NoRestrictVerify，无限制规则，可以一直购买，单次限制购买100个
 *
 */
public interface RestrictInterface {

    /**
     * 验证是否符合活动的规则
     * @param activityGoshoppingBo
     * @param mallActivityEntity
     * @return
     */
    boolean verify(ActivityGoshoppingBo activityGoshoppingBo,MallActivityEntity mallActivityEntity);

    /**
     * 获得活动商品 并且符合活动规则
     *
     * @param activity
     * @return
     */
    List<MallGoodsToActivityEntity> getList(MallActivityEntity activity,ActivityGoshoppingBo bo);

    /**
     * 符合活动规则可以领取的次数
     * @param activityGoshoppingBo
     * @param mallActivityEntity
     * @return
     */
    Integer getNumber(ActivityGoshoppingBo activityGoshoppingBo,MallActivityEntity mallActivityEntity);

    /**
     * 消减验证信息的后续操作.
     * 例如：白名单数量，在操作成功之后，需要减扣白名单的次数，防止重复使用
     */
    boolean successAfter(ActivityGoshoppingBo activityGoshoppingBo);

    /**
     * 验证信息时，每个活动类型要返回的数据
     * @return
     */
    JSONObject getDataJson(ActivityGoshoppingBo activityGoshoppingBo,MallActivityEntity mallActivityEntity);

    /**
     * 取消订单时，给白名单增强次数等处理
     */
    boolean cancel(MallActivityEntity activityEntity,ActivityGoshoppingBo bo);

}
